Overview
This Rmarkdown notebook explores exposure data for Ch. 3 of my dissertation project. This study uses air quality and drilling from 1999 to 2019 across California.
Data sources
- California Air Resources Board - administrative shapefiles
- Enverus (formerly DrillingInfo) - well sites
- US EPA Air Quality System (AQS) - monitoring sites, air pollutant concentrations
- US Census Bureau - administrative shapefiles
For this project, we used data from 284 unique monitors from the AQS dataset. We obtained data on concentrations of four air pollutants from 1999 to 2019: CO, O3, NO2, PM10, PM2.5, and SO2. Note that not all monitors monitor all pollutants.
Air Quality Monitors
Map. Location of air quality monitors and oil fields

Map. Location of air quality monitors and air basins

We used data on 30886 well sites in preproduction and 92421 well sites in production in California during the study period (1999-2019). Note that these groups are not mutually exclusive. Well sites were most highly concentrated in the Central Valley and Southern California.
Map. Location of air quality monitors and well sites
The orange shaded area is a 5 km buffer around well sites in preproduction stage. The dark gray shaded area is a 5 km buffer around well sites in the production stage.

Distribution of Pollutant Concentrations
///// organize by pollutant? map monitors by pollutant?
Distribution of CO Concentrations

Distribution of N02 Concentrations

Distribution of Ozone Concentrations

Distribution of PM10 Concentrations
This distibution is right-skewed

Distribution of PM2.5 Concentrations

Distribution of SO2 Concentrations

Pollutant Concentrations by Month
CO Concentration by Month

NO2 Concentration by Month

Ozone Concentration by Month

PM10 Concentration by Month

PM2.5 Concentration by Month

SO2 Concentration by Month
Concentrations by Air Basin
LS0tCnRpdGxlOiAiQ2guIDM6IE9pbCBQcm9kdWN0aW9uIGFuZCBBaXIgUXVhbGl0eSBpbiBDYWxpZm9ybmlhIgpzdWJ0aXRsZTogIkRhdGEgRXhwbG9yYXRpb246IEFpciBRdWFsaXR5IERhdGEiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIGxvYWRzIG5lY2Vzc2FyeSBwYWNrYWdlcyBhbmQgZGVmaW5lcyBnbG9iYWwgdmFyaWFibGVzCiAgc291cmNlKCIuLi8uLi9jb2RlLzAtc2V0dXAvMDEtc2V0dXAuUiIpCmBgYAoKYGBge3IgZGF0YV9pbXBvcnQsIGVjaG89RkFMU0UsIGluY2x1ZGU9RkFMU0V9CiMgaW1wb3J0cyByYXcgZGF0YQogICMgQ2FsaWZvcm5pYSBBaXIgUmVzb3VyY2VzIEJvYXJkIChDQVJCKSAtIGFkbWluaXN0cmF0aXZlIHNoYXBlZmlsZXMKICBjYXJiX2Fpcl9iYXNpbnNfcmF3IDwtCiAgICBzdF9yZWFkKCIuLi8uLi9kYXRhL3Jhdy9jYWxfZXBhL2NhcmJfYWlyX2Jhc2lucy9DYUFpckJhc2luLnNocCIpCiAgY2FyYl9haXJfZGlzdHJpY3RzX3JhdyA8LQogICAgc3RfcmVhZCgiLi4vLi4vZGF0YS9yYXcvY2FsX2VwYS9jYXJiX2Fpcl9kaXN0cmljdHMvQ2FBaXJEaXN0cmljdC5zaHAiKQogIAogICMgQ2FsR0VNIC0gcHJvZHVjdGlvbiwgc2hhcGVmaWxlcwogIGNhbGdlbV9maWVsZHNfcmF3IDwtIAogICAgc3RfcmVhZCgiLi4vLi4vZGF0YS9yYXcvY2FsX2dlbS9maWVsZF9ib3VuZGFyaWVzL0RPR0dSX0FkbWluX0JvdW5kYXJpZXNfTWFzdGVyLnNocCIpCiAgCiAgIyBEcmlsbGluZ0luZm8gLSBvaWwgYW5kIGdhcyB3ZWxsIHNpdGVzCiAgZGlfd2VsbHNfcmF3IDwtCiAgICByZWFkX2NzdigiLi4vLi4vZGF0YS9yYXcvZHJpbGxpbmdpbmZvL2NhbGlmb3JuaWFfd2VsbHNfamFuMjAxOS5jc3YiKQogIAojIFVTIEVQQSBBaXIgUXVhbGl0eSBTeXN0ZW0gKEFRUykgLSBhbWJpZW50IGFpciBxdWFsaXR5CiAgYXFzX2NvX3JhdyA8LSBsaXN0LmZpbGVzKCIuLi8uLi9kYXRhL3Jhdy91c19lcGEvYWlyX3F1YWxpdHlfc3lzdGVtL2NvIiwgIyBnZXRzIG5hbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gImVwYV9hcXNfY28iLCBmdWxsLm5hbWVzID0gVCkgJT4lCiAgICBtYXBfZGYofnJlYWRfY3N2KC4pKQogIAogIGFxc19ubzJfcmF3IDwtIGxpc3QuZmlsZXMoIi4uLy4uL2RhdGEvcmF3L3VzX2VwYS9haXJfcXVhbGl0eV9zeXN0ZW0vbm8yIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiZXBhX2Fxc19ubzIiLCBmdWxsLm5hbWVzID0gVCkgJT4lCiAgICBtYXBfZGYofnJlYWRfY3N2KC4pKSAgIyBpbXBvcnRzIGFsbCBmaWxlcwogIAogIGFxc19vem9uZV9yYXcgPC0gbGlzdC5maWxlcygiLi4vLi4vZGF0YS9yYXcvdXNfZXBhL2Fpcl9xdWFsaXR5X3N5c3RlbS9vem9uZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiZXBhX2Fxc19vem9uZSIsIGZ1bGwubmFtZXMgPSBUKSAlPiUKICAgIG1hcF9kZih+cmVhZF9jc3YoLikpCiAgCiAgYXFzX3BtMi41X3JhdyA8LSBsaXN0LmZpbGVzKCIuLi8uLi9kYXRhL3Jhdy91c19lcGEvYWlyX3F1YWxpdHlfc3lzdGVtL3BtMjUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gImVwYV9hcXNfcG0yNSIsIGZ1bGwubmFtZXMgPSBUKSAlPiUKICAgIG1hcF9kZih+cmVhZF9jc3YoLikpCiAgCiAgYXFzX3BtMTBfcmF3IDwtIGxpc3QuZmlsZXMoIi4uLy4uL2RhdGEvcmF3L3VzX2VwYS9haXJfcXVhbGl0eV9zeXN0ZW0vcG0xMCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9ICJlcGFfYXFzX3BtMTAiLCBmdWxsLm5hbWVzID0gVCkgJT4lCiAgICBtYXBfZGYofnJlYWRfY3N2KC4pKQogIAogIGFxc19zbzJfcmF3IDwtIGxpc3QuZmlsZXMoIi4uLy4uL2RhdGEvcmF3L3VzX2VwYS9haXJfcXVhbGl0eV9zeXN0ZW0vc28yIiwgIyBnZXRzIG5hbWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm4gPSAiZXBhX2Fxc19zbzIiLCBmdWxsLm5hbWVzID0gVCkgJT4lCiAgICBtYXBfZGYofnJlYWRfY3N2KC4pKSAgIyBpbXBvcnRzIGFsbCBmaWxlcwpgYGAKCmBgYHtyIGRhdGFfdGlkeWluZywgaW5jbHVkZT1GQUxTRX0KIyBsb2FkcyBmdW5jdGlvbnMgZm9yIHRpZHlpbmcgdGhlIGRhdGEKICBzb3VyY2UoIi4uLy4uL2NvZGUvMi10aWR5aW5nLzAxLXRpZHlfYWlybm93X2RhdGEuUiIpCiAgI3NvdXJjZSgiLi4vLi4vY29kZS8yLXRpZHlpbmcvMDItdGlkeV9kcmlsbGluZ19kYXRhLlIiKQoKIyBwcmVwYXJlcyBVUyBFUEEgQWlyIFF1YWxpdHkgU3lzdGVtIChBUVMpIGRhdGEKICBhcXNfY28gICA8LSBwcmVwQWlyUXVhbGl0eURhdGEoYXFzX2NvX3JhdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHlfbWF4X2NvX2NvbmNlbnRyYXRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYWlseSBNYXggOC1ob3VyIENPIENvbmNlbnRyYXRpb24iKSAlPiUKICAgICMgc3VtbWFyaXplcyBtZWFuIG1vbnRobHkgY29uY2VudHJhdGlvbiBmb3IgZWFjaCBwb2xsdXRhbnQ7IGl0J3MgZWFzaWVyCiAgICAjIHRvIGRvIHRoaXMgb3V0c2lkZSB0aGUgcHJlcEFpclF1YWxpdHlEYXRhIGZ1bmN0aW9uCiAgICBncm91cF9ieShzaXRlX2lkLCBtb250aF95ZWFyKSAlPiUKICAgIGRwbHlyOjpzdW1tYXJpemUobW9udGhseV9tZWFuX2NvID0gbWVhbihkYWlseV9tYXhfY29fY29uY2VudHJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKSkKCiAgYXFzX25vMiAgIDwtIHByZXBBaXJRdWFsaXR5RGF0YShhcXNfbm8yX3JhdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseV9tYXhfbm8yX2NvbmNlbnRyYXRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRhaWx5IE1heCAxLWhvdXIgTk8yIENvbmNlbnRyYXRpb24iKSAlPiUKICAgICMgc3VtbWFyaXplcyBtZWFuIG1vbnRobHkgY29uY2VudHJhdGlvbiBmb3IgZWFjaCBwb2xsdXRhbnQ7IGl0J3MgZWFzaWVyCiAgICAjIHRvIGRvIHRoaXMgb3V0c2lkZSB0aGUgcHJlcEFpclF1YWxpdHlEYXRhIGZ1bmN0aW9uCiAgICBncm91cF9ieShzaXRlX2lkLCBtb250aF95ZWFyKSAlPiUKICAgIGRwbHlyOjpzdW1tYXJpemUobW9udGhseV9tZWFuX25vMiA9IG1lYW4oZGFpbHlfbWF4X25vMl9jb25jZW50cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpKQogIAogIGFxc19vem9uZSA8LSBwcmVwQWlyUXVhbGl0eURhdGEoYXFzX296b25lX3JhdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseV9tYXhfb3pvbmVfY29uY2VudHJhdGlvbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGFpbHkgTWF4IDgtaG91ciBPem9uZSBDb25jZW50cmF0aW9uIikgJT4lCiAgICAjIHN1bW1hcml6ZXMgbWVhbiBtb250aGx5IGNvbmNlbnRyYXRpb24gZm9yIGVhY2ggcG9sbHV0YW50OyBpdCdzIGVhc2llcgogICAgIyB0byBkbyB0aGlzIG91dHNpZGUgdGhlIHByZXBBaXJRdWFsaXR5RGF0YSBmdW5jdGlvbgogICAgZ3JvdXBfYnkoc2l0ZV9pZCwgbW9udGhfeWVhcikgJT4lCiAgICBkcGx5cjo6c3VtbWFyaXplKG1vbnRobHlfbWVhbl9vem9uZSA9IG1lYW4oZGFpbHlfbWF4X296b25lX2NvbmNlbnRyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKSkKICAKICBhcXNfcG0yLjUgPC0gcHJlcEFpclF1YWxpdHlEYXRhKGFxc19wbTIuNV9yYXcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGFpbHlfbWVhbl9wbTIuNV9jb25jZW50cmF0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYWlseSBNZWFuIFBNMi41IENvbmNlbnRyYXRpb24iKSAlPiUKICAgICMgc3VtbWFyaXplcyBtZWFuIG1vbnRobHkgY29uY2VudHJhdGlvbiBmb3IgZWFjaCBwb2xsdXRhbnQ7IGl0J3MgZWFzaWVyCiAgICAjIHRvIGRvIHRoaXMgb3V0c2lkZSB0aGUgcHJlcEFpclF1YWxpdHlEYXRhIGZ1bmN0aW9uCiAgICBncm91cF9ieShzaXRlX2lkLCBtb250aF95ZWFyKSAlPiUKICAgIGRwbHlyOjpzdW1tYXJpemUobW9udGhseV9tZWFuX3BtMi41ID0gbWVhbihkYWlseV9tZWFuX3BtMi41X2NvbmNlbnRyYXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKSkKICAKICBhcXNfcG0xMCAgPC0gcHJlcEFpclF1YWxpdHlEYXRhKGFxc19wbTEwX3JhdywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseV9tZWFuX3BtMTBfY29uY2VudHJhdGlvbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRGFpbHkgTWVhbiBQTTEwIENvbmNlbnRyYXRpb24iKSAlPiUKICAgICMgc3VtbWFyaXplcyBtZWFuIG1vbnRobHkgY29uY2VudHJhdGlvbiBmb3IgZWFjaCBwb2xsdXRhbnQ7IGl0J3MgZWFzaWVyCiAgICAjIHRvIGRvIHRoaXMgb3V0c2lkZSB0aGUgcHJlcEFpclF1YWxpdHlEYXRhIGZ1bmN0aW9uCiAgICBncm91cF9ieShzaXRlX2lkLCBtb250aF95ZWFyKSAlPiUKICAgIGRwbHlyOjpzdW1tYXJpemUobW9udGhseV9tZWFuX3BtMTAgPSBtZWFuKGRhaWx5X21lYW5fcG0xMF9jb25jZW50cmF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKSkKICAKICBhcXNfc28yICAgPC0gcHJlcEFpclF1YWxpdHlEYXRhKGFxc19zbzJfcmF3LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWlseV9tYXhfc28yX2NvbmNlbnRyYXRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEYWlseSBNYXggMS1ob3VyIFNPMiBDb25jZW50cmF0aW9uIikgJT4lCiAgICAjIHN1bW1hcml6ZXMgbWVhbiBtb250aGx5IGNvbmNlbnRyYXRpb24gZm9yIGVhY2ggcG9sbHV0YW50OyBpdCdzIGVhc2llcgogICAgIyB0byBkbyB0aGlzIG91dHNpZGUgdGhlIHByZXBBaXJRdWFsaXR5RGF0YSBmdW5jdGlvbgogICAgZ3JvdXBfYnkoc2l0ZV9pZCwgbW9udGhfeWVhcikgJT4lCiAgICBkcGx5cjo6c3VtbWFyaXplKG1vbnRobHlfbWVhbl9zbzIgPSBtZWFuKGRhaWx5X21heF9zbzJfY29uY2VudHJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKSkKICAKICAjIG1lcmdlcyBwb2xsdXRhbnQgb2JzZXJ2YXRpb25zIGFjcm9zcyBhbGwgJ2Fxc19zaXRlcycgdG8gbWFrZSBvbmUKICAjIGNvbWJpbmVkIHRpYmJsZSB3aXRoIGFsbCBvYnNlcnZhdGlvbnMKICAKICAgICMgZm9yIGVhY2ggcG9sbHV0YW50LCBjcmVhdGVzIHVuaXF1ZSBpZCBmb3IgZWFjaCAnc2l0ZV9pZF9tb250aF95ZWFyJzsgCiAgICAjIHRoZW4gdXNlcyAnYXFzX25vMicgYXMgdGhlIGJhc2UgdGliYmxlLCBzdHJpcHMgcmVkdW5kYW50IHZhcmlhYmxlcyBmcm9tCiAgICAjIHRoZSB0aWJibGVzIGZvciB0aGUgb3RoZXIgdGhyZWUgcG9sbHV0YW50cywgYW5kIGNhbGxzIGEgbGVmdF9qb2luCiAgICBhcXNfb3pvbmUgPC0gYXFzX296b25lICU+JQogICAgICAjIGNyZWF0ZXMgdW5pcXVlIGlkIGZvciBlYWNoIHNpdGVfaWRfbW9udGhfeWVhcgogICAgICBtdXRhdGUoc2l0ZV9pZF9tb250aF95ZWFyID0gcGFzdGUoc2l0ZV9pZCwgbW9udGhfeWVhciwgc2VwID0gIi0iKSkKICAgIGFxc19vem9uZSRzaXRlX2lkX21vbnRoX3llYXIgPC0gCiAgICAgIGFzLmZhY3RvcihhcXNfb3pvbmUkc2l0ZV9pZF9tb250aF95ZWFyKQogICAgCiAgICBhcXNfY28gPC0gYXFzX2NvICU+JQogICAgICBtdXRhdGUoc2l0ZV9pZF9tb250aF95ZWFyID0gcGFzdGUoc2l0ZV9pZCwgbW9udGhfeWVhciwgc2VwID0gIi0iKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc2l0ZV9pZF9tb250aF95ZWFyLCBzaXRlX2lkLCBtb250aGx5X21lYW5fY28pCiAgICAKICAgIGFxc19ubzIgPC0gYXFzX25vMiAlPiUKICAgICAgbXV0YXRlKHNpdGVfaWRfbW9udGhfeWVhciA9IHBhc3RlKHNpdGVfaWQsIG1vbnRoX3llYXIsIHNlcCA9ICItIikpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHNpdGVfaWRfbW9udGhfeWVhciwgc2l0ZV9pZCwgbW9udGhseV9tZWFuX25vMikKICAgIAogICAgYXFzX3BtMTAgPC0gYXFzX3BtMTAgJT4lCiAgICAgIG11dGF0ZShzaXRlX2lkX21vbnRoX3llYXIgPSBwYXN0ZShzaXRlX2lkLCBtb250aF95ZWFyLCBzZXAgPSAiLSIpKSAlPiUKICAgICAgZHBseXI6OnNlbGVjdChzaXRlX2lkX21vbnRoX3llYXIsIHNpdGVfaWQsIG1vbnRobHlfbWVhbl9wbTEwKQogICAgCiAgICBhcXNfcG0yLjUgPC0gYXFzX3BtMi41ICU+JQogICAgICBtdXRhdGUoc2l0ZV9pZF9tb250aF95ZWFyID0gcGFzdGUoc2l0ZV9pZCwgbW9udGhfeWVhciwgc2VwID0gIi0iKSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc2l0ZV9pZF9tb250aF95ZWFyLCBzaXRlX2lkLCBtb250aGx5X21lYW5fcG0yLjUpCiAgICAKICAgIGFxc19zbzIgPC0gYXFzX3NvMiAlPiUKICAgICAgbXV0YXRlKHNpdGVfaWRfbW9udGhfeWVhciA9IHBhc3RlKHNpdGVfaWQsIG1vbnRoX3llYXIsIHNlcCA9ICItIikpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHNpdGVfaWRfbW9udGhfeWVhciwgc2l0ZV9pZCwgbW9udGhseV9tZWFuX3NvMikKICAgIAogICAgIyBtYWtlcyBmaW5hbCBjb21iaW5lZCBkYXRhc2V0CiAgICBhcXNfY29tYmluZWQgPC0gCiAgICAgIGxlZnRfam9pbihhcXNfb3pvbmUsIGFxc19jbywgYnkgPSAic2l0ZV9pZF9tb250aF95ZWFyIikgJT4lCiAgICAgIGxlZnRfam9pbihhcXNfbm8yLCBieSA9ICJzaXRlX2lkX21vbnRoX3llYXIiKSAlPiUKICAgICAgbGVmdF9qb2luKGFxc19wbTEwLCBieSA9ICJzaXRlX2lkX21vbnRoX3llYXIiKSAlPiUKICAgICAgbGVmdF9qb2luKGFxc19wbTIuNSwgYnkgPSAic2l0ZV9pZF9tb250aF95ZWFyIikgJT4lCiAgICAgIGxlZnRfam9pbihhcXNfc28yLCBieSA9ICJzaXRlX2lkX21vbnRoX3llYXIiKSAlPiUKICAgICAgIyBjbGVhbnMgdXAgYW5kIGFycmFuZ2VzIGNvbHVtbnMKICAgICAgbXV0YXRlKHNpdGVfaWQgPSBzaXRlX2lkLngpICU+JQogICAgICBkcGx5cjo6c2VsZWN0KHNpdGVfaWQsIAogICAgICAgICAgICAgICAgICAgIG1vbnRoX3llYXIsIAogICAgICAgICAgICAgICAgICAgIHNpdGVfaWRfbW9udGhfeWVhciwgCiAgICAgICAgICAgICAgICAgICAgbW9udGhseV9tZWFuX2NvLAogICAgICAgICAgICAgICAgICAgIG1vbnRobHlfbWVhbl9vem9uZSwKICAgICAgICAgICAgICAgICAgICBtb250aGx5X21lYW5fbm8yLCAKICAgICAgICAgICAgICAgICAgICBtb250aGx5X21lYW5fcG0xMCwgCiAgICAgICAgICAgICAgICAgICAgbW9udGhseV9tZWFuX3BtMi41LCAKICAgICAgICAgICAgICAgICAgICBtb250aGx5X21lYW5fc28yKSMsIAogICAgICAgICAgICAgICAgICAgICNzaXRlX2lkLngpCiAgICAKICAgICMgY29udmVydHMgJ3NpdGVfaWRfbW9udGhfeWVhcicgdG8gZmFjdG9yCiAgICBhcXNfY29tYmluZWQkc2l0ZV9pZF9tb250aF95ZWFyIDwtIAogICAgICBhcy5mYWN0b3IoYXFzX2NvbWJpbmVkJHNpdGVfaWRfbW9udGhfeWVhcikKICAgIAogICAgIyBnZXRzIGxhdC9sb25nIGRhdGEgZnJvbSByYXcgZGF0YSBhbmQgam9pbnMgYnkgc2l0ZV9pZAogICAgYXFzX2xhdF9sb25nIDwtIGFxc19vem9uZV9yYXcgJT4lCiAgICAgIG11dGF0ZShzaXRlX2lkICAgPSBhcy5mYWN0b3IoYFNpdGUgSURgKSwKICAgICAgICAgICAgIGxhdGl0dWRlICA9IFNJVEVfTEFUSVRVREUsCiAgICAgICAgICAgICBsb25naXR1ZGUgPSBTSVRFX0xPTkdJVFVERSkgJT4lCiAgICAgIGRwbHlyOjpzZWxlY3Qoc2l0ZV9pZCwgbG9uZ2l0dWRlLCBsYXRpdHVkZSkgJT4lCiAgICAgIGRpc3RpbmN0KCkKICAgIAogICAgIyBtYWtlcyBmaW5hbCAnYXFzX2NvbWJpbmVkJyBkYXRhc2V0IGJlZm9yZSBhbmFseXNpcwogICAgYXFzX2NvbWJpbmVkIDwtIGFxc19jb21iaW5lZCAlPiUKICAgICAgIyBqb2lucyBsYXQvbG9uZyBkYXRhIHRvIGNvbWJpbmVkIGFpcm5vdyBkYXRhc2V0CiAgICAgIGxlZnRfam9pbihhcXNfbGF0X2xvbmcsIGJ5ID0gInNpdGVfaWQiKSAlPiUKICAgICAgIyBhZGRzIGNvbHVtbiB0byBjYXB0dXJlIGludmVyc2UgZGlzdGFuY2Ugd2VpZ2h0ZWQgKElEVykgaW5kZXgKICAgICAgIyBpbiB0aGUgZXhwb3N1cmUgYXNzZXNzbWVudCBiZWxvdwogICAgICBtdXRhdGUoaWR3X2luZGV4ID0gTkEpCmBgYAoKYGBge3IgZGF0YV90aWR5aW5nMiwgaW5jbHVkZT1GQUxTRX0KIyBwcmVwYXJlcyBkYXRhc2V0cyBuZWNlc3NhcnkgZm9yIHRoaXMgbm90ZWJvb2sKCiAgIyBzaXRlcyBvZiBhaXIgcXVhbGl0eSBtb25pdG9ycywgc2Ygb2JqZWN0CiAgYXFzX3NpdGVzIDwtIGFxc19jb21iaW5lZCAlPiUKICAgIGRpc3RpbmN0KHNpdGVfaWQsIC5rZWVwX2FsbCA9IFRSVUUpICU+JQogICAgc3RfYXNfc2YoY29vcmRzID0gYygibG9uZ2l0dWRlIiwgImxhdGl0dWRlIiksIGNycyA9IGNyc19uYWQ4MykKCiAgIyBwcmVwcyBDYWxHRU0gZmllbGRzIGRhdGE7IG5lZWRzIHRvIGhhcHBlbiBiZWZvcmUgcHJlcERyaWxsaW5nRGF0YSgpCiAgICBjYWxnZW1fZmllbGRzIDwtIGNhbGdlbV9maWVsZHNfcmF3ICU+JQogICAgICBzdF90cmFuc2Zvcm0oY3JzX25hZDgzKSAlPiUKICAgICAgIyByZW5hbWVzIHZhcmlibGUgbmFtZXMKICAgICAgbXV0YXRlKGZpZWxkX29iamVjdF9pZCAgICA9IE9CSkVDVElELCAgIyBub3Qgc3VyZSB3aGF0IHRoaXMgaXMKICAgICAgICAgICAgIGZpZWxkX25hbWUgICAgICAgICA9IE5BTUUsCiAgICAgICAgICAgICBmaWVsZF9jb2RlICAgICAgICAgPSBGSUVMRF9DT0RFLAogICAgICAgICAgICAgZmllbGRfYXJlYV9zcV9taWxlID0gQVJFQV9TUV9NSSwKICAgICAgICAgICAgIGZpZWxkX2FyZWFfYWNyZSAgICA9IEFSRUFfQUNSRSwKICAgICAgICAgICAgIGZpZWxkX3BlcmltZXRlciAgICA9IFBFUklNRVRFUiwKICAgICAgICAgICAgIGZpZWxkX3N0YXJ0X2RhdGUgICA9IFN0YXJ0RGF0ZSwKICAgICAgICAgICAgIGZpZWxkX2VuZF9kYXRlICAgICA9IEVuZERhdGUsCiAgICAgICAgICAgICBkaXN0cmljdF9uYW1lICAgICAgPSBEaXN0cmljdCkgJT4lCiAgICAgICMga2VlcHMgb25seSB0aGUgdmFyaWFibGVzIHdlIG5lZWQKICAgICAgc2VsZWN0KGZpZWxkX29iamVjdF9pZDpkaXN0cmljdF9uYW1lKQoKICAjIHByZXBzIERyaWxsaW5nSW5mbyB3ZWxscyBkYXRhCiAgZGlfd2VsbHMgPC0gcHJlcERyaWxsaW5nRGF0YShkaV93ZWxsc19yYXcpCiAgICAKICAjIHdlbGxzIGluIHByZXByb2R1Y3Rpb24gc3RhZ2UgZHVyaW5nIHRoZSBzdHVkeSBwZXJpb2QsIHNmIG9iamVjdAogIHdlbGxzX3ByZXByb2QgPC0gZGlfd2VsbHMgJT4lCiAgICBmaWx0ZXIoZHJpbGxlZF8xOTk5X3RvXzIwMTkgPT0gMSkgJT4lCiAgICBzdF9hc19zZihjb29yZHMgPSBjKCJsb25naXR1ZGUiLCAibGF0aXR1ZGUiKSwgY3JzID0gY3JzX25hZDgzKQogICAgCiAgIyB3ZWxscyBpbiBwcm9kdWN0aW9uIHN0YWdlIGR1cmluZyB0aGUgc3R1ZHkgcGVyaW9kLCBzZiBvYmplY3QKICB3ZWxsc19wcm9kIDwtIGRpX3dlbGxzICU+JQogICAgZmlsdGVyKHByb2RfMTk5OV90b18yMDE5ID09IDEpICU+JQogICAgc3RfYXNfc2YoY29vcmRzID0gYygibG9uZ2l0dWRlIiwgImxhdGl0dWRlIiksIGNycyA9IGNyc19uYWQ4MykKICAKICAjIG1ha2VzIDUga20gYnVmZmVyIGFyb3VuZCB3ZWxsIHNpdGVzIGluIHByZXByb2R1Y3Rpb24gc3RhZ2UKICB3ZWxsc19wcmVwcm9kX2J1ZmZlciA8LSB3ZWxsc19wcmVwcm9kICU+JQogICAgIyB0cmFuc2Zvcm1zIG9iamVjdGVkIHRvIHByb2plY3RlZCBDUlMsIG5lY2Vzc2FyeSBiZWZvcmUgbWFraW5nIGJ1ZmZlcgogICAgc3RfdHJhbnNmb3JtKGNyc19wcm9qZWN0ZWQpICU+JQogICAgIyBtYWtlcyA1LDAwMCBtIGJ1ZmZlcgogICAgc3RfYnVmZmVyKGRpc3QgPSA1MDAwKSAlPiUgICMgZGlzdGFuY2UgaW4gbWV0ZXJzCiAgICAjIG1lcmdlcyBvdmVybGFwcGluZyBwb2x5Z29ucwogICAgc3RfdW5pb24oKSAKICAKICAjIG1ha2VzIDUga20gYnVmZmVyIGFyb3VuZCB3ZWxsIHNpdGVzIGluIHByb2R1Y3Rpb24gc3RhZ2UKICB3ZWxsc19wcm9kX2J1ZmZlciA8LSB3ZWxsc19wcm9kICU+JQogICAgIyB0cmFuc2Zvcm1zIG9iamVjdGVkIHRvIHByb2plY3RlZCBDUlMsIG5lY2Vzc2FyeSBiZWZvcmUgbWFraW5nIGJ1ZmZlcgogICAgc3RfdHJhbnNmb3JtKGNyc19wcm9qZWN0ZWQpICU+JQogICAgIyBtYWtlcyA1LDAwMCBtIGJ1ZmZlcgogICAgc3RfYnVmZmVyKGRpc3QgPSA1MDAwKSAlPiUgICMgZGlzdGFuY2UgaW4gbWV0ZXJzCiAgICAjIG1lcmdlcyBvdmVybGFwcGluZyBwb2x5Z29ucwogICAgc3RfdW5pb24oKSAKYGBgCgojIyMgT3ZlcnZpZXcKClRoaXMgUm1hcmtkb3duIG5vdGVib29rIGV4cGxvcmVzIGV4cG9zdXJlIGRhdGEgZm9yIENoLiAzIG9mIG15IGRpc3NlcnRhdGlvbiBwcm9qZWN0LiBUaGlzIHN0dWR5IHVzZXMgYWlyIHF1YWxpdHkgYW5kIGRyaWxsaW5nIGZyb20gMTk5OSB0byAyMDE5IGFjcm9zcyBDYWxpZm9ybmlhLgoKIyMjIyBEYXRhIHNvdXJjZXMKCi0gQ2FsaWZvcm5pYSBBaXIgUmVzb3VyY2VzIEJvYXJkIC0gYWRtaW5pc3RyYXRpdmUgc2hhcGVmaWxlcwotIEVudmVydXMgKGZvcm1lcmx5IERyaWxsaW5nSW5mbykgLSB3ZWxsIHNpdGVzCi0gVVMgRVBBIEFpciBRdWFsaXR5IFN5c3RlbSAoQVFTKSAtIG1vbml0b3Jpbmcgc2l0ZXMsIGFpciBwb2xsdXRhbnQgY29uY2VudHJhdGlvbnMKLSBVUyBDZW5zdXMgQnVyZWF1IC0gYWRtaW5pc3RyYXRpdmUgc2hhcGVmaWxlcwoKRm9yIHRoaXMgcHJvamVjdCwgd2UgdXNlZCBkYXRhIGZyb20gKipgciBsZW5ndGgobGV2ZWxzKGFxc19jb21iaW5lZCRzaXRlX2lkKSlgKiogdW5pcXVlIG1vbml0b3JzIGZyb20gdGhlIEFRUyBkYXRhc2V0LiBXZSBvYnRhaW5lZCBkYXRhIG9uIGNvbmNlbnRyYXRpb25zIG9mIGZvdXIgYWlyIHBvbGx1dGFudHMgZnJvbSAxOTk5IHRvIDIwMTk6IENPLCBPMywgTk8yLCBQTTEwLCBQTTIuNSwgYW5kIFNPMi4gTm90ZSB0aGF0IG5vdCBhbGwgbW9uaXRvcnMgbW9uaXRvciBhbGwgcG9sbHV0YW50cy4KCiMjIyBBaXIgUXVhbGl0eSBNb25pdG9ycwoKIyMjIyBNYXAuIExvY2F0aW9uIG9mIGFpciBxdWFsaXR5IG1vbml0b3JzIGFuZCBvaWwgZmllbGRzCgpgYGB7ciBlY2hvPUZBTFNFfQojIG1ha2VzIG1hcApnZ3Bsb3QoKSArCiAgZ2VvbV9zZihkYXRhID0gc3RfdW5pb24oY2FsX2NvdW50aWVzKSwgZmlsbCA9ICIjRkZGRkZGIikgKwogIGdlb21fc2YoZGF0YSA9IGNhbGdlbV9maWVsZHMsIGNvbG9yID0gInJlZCIpICsKICBnZW9tX3NmKGRhdGEgPSBhcXNfc2l0ZXMsIHNoYXBlID0gMSkgKwogIHRoZW1lX2J3KCkKYGBgCgoKCgojIyMjIE1hcC4gTG9jYXRpb24gb2YgYWlyIHF1YWxpdHkgbW9uaXRvcnMgYW5kIGFpciBiYXNpbnMKCmBgYHtyIGVjaG89RkFMU0V9CiMgbWFrZXMgbWFwCmdncGxvdCgpICsKICBnZW9tX3NmKGRhdGEgPSBjYXJiX2Fpcl9iYXNpbnMsIAogICAgICAgICAgYWVzKGZpbGwgPSBOQU1FKSwgY29sb3IgPSAiI0ZGRkZGRiIsIGFscGhhID0gMC43KSArCiAgZ2VvbV9zZihkYXRhID0gYXFzX3NpdGVzLCBzaGFwZSA9IDEpICsKICB0aGVtZV9idygpCmBgYAoKCldlIHVzZWQgZGF0YSBvbiAqKmByIGRpX3dlbGxzICU+JSBmaWx0ZXIoZHJpbGxlZF8xOTk5X3RvXzIwMTkgPT0gMSkgJT4lIG5yb3coKWAqKiB3ZWxsIHNpdGVzIGluIHByZXByb2R1Y3Rpb24gYW5kICoqYHIgZGlfd2VsbHMgJT4lIGZpbHRlcihwcm9kXzE5OTlfdG9fMjAxOSA9PSAxKSAlPiUgbnJvdygpYCoqIHdlbGwgc2l0ZXMgaW4gcHJvZHVjdGlvbiBpbiBDYWxpZm9ybmlhIGR1cmluZyB0aGUgc3R1ZHkgcGVyaW9kICgxOTk5LTIwMTkpLiBOb3RlIHRoYXQgdGhlc2UgZ3JvdXBzIGFyZSBub3QgbXV0dWFsbHkgZXhjbHVzaXZlLiBXZWxsIHNpdGVzIHdlcmUgbW9zdCBoaWdobHkgY29uY2VudHJhdGVkIGluIHRoZSBDZW50cmFsIFZhbGxleSBhbmQgU291dGhlcm4gQ2FsaWZvcm5pYS4gCgojIyMjIE1hcC4gTG9jYXRpb24gb2YgYWlyIHF1YWxpdHkgbW9uaXRvcnMgYW5kIHdlbGwgc2l0ZXMKClRoZSBvcmFuZ2Ugc2hhZGVkIGFyZWEgaXMgYSA1IGttIGJ1ZmZlciBhcm91bmQgd2VsbCBzaXRlcyBpbiBwcmVwcm9kdWN0aW9uIHN0YWdlLiBUaGUgZGFyayBncmF5IHNoYWRlZCBhcmVhIGlzIGEgNSBrbSBidWZmZXIgYXJvdW5kIHdlbGwgc2l0ZXMgaW4gdGhlIHByb2R1Y3Rpb24gc3RhZ2UuCgpgYGB7ciBlY2hvPUZBTFNFfQpnZ3Bsb3QoKSArCiAgZ2VvbV9zZihkYXRhID0gY2FsX2NvdW50aWVzLCBmaWxsID0gIiMwMDAwMDAiLCBjb2xvciA9IE5BLCBhbHBoYSA9IDAuMikgKwogIGdlb21fc2YoZGF0YSA9IHdlbGxzX3Byb2RfYnVmZmVyLCBmaWxsID0gIiMwMDAwMDAiLCBhbHBoYSA9IDAuNykgKwogIGdlb21fc2YoZGF0YSA9IHdlbGxzX3ByZXByb2RfYnVmZmVyLCBmaWxsID0gIiNmMWEzNDAiLCBhbHBoYSA9IDAuNykgKwogIGdlb21fc2YoZGF0YSA9IGFxc19zaXRlcywgc2hhcGUgPSAyLCBhbHBoYSA9IDAuNykgKwogIHRoZW1lX2J3KCkKYGBgCgoKIyMjIERpc3RyaWJ1dGlvbiBvZiBQb2xsdXRhbnQgQ29uY2VudHJhdGlvbnMKCi8vLy8vIG9yZ2FuaXplIGJ5IHBvbGx1dGFudD8gbWFwIG1vbml0b3JzIGJ5IHBvbGx1dGFudD8KCiMjIyMgRGlzdHJpYnV0aW9uIG9mIENPIENvbmNlbnRyYXRpb25zCgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQphcXNfY29tYmluZWQgJT4lCiAgZ2dwbG90KCkgKwogICAgZ2VvbV9oaXN0b2dyYW0oYWVzKG1vbnRobHlfbWVhbl9jbyksIGJpbnMgPSAxMDApICsgCiAgICBsYWJzKHggPSAiTWVhbiBNb250aGx5IENPIENvbmNlbnRyYXRpb24gKHBwbSkiLCB5ID0gIkNvdW50IikgKyAKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCiMjIyMgRGlzdHJpYnV0aW9uIG9mIE4wMiBDb25jZW50cmF0aW9ucwoKYGBge3IgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KYXFzX2NvbWJpbmVkICU+JQogIGdncGxvdCgpICsKICAgIGdlb21faGlzdG9ncmFtKGFlcyhtb250aGx5X21lYW5fbm8yKSwgYmlucyA9IDEwMCkgKyAKICAgIGxhYnMoeCA9ICJNZWFuIE1vbnRobHkgTk8yIENvbmNlbnRyYXRpb24gKHBwYikiLCB5ID0gIkNvdW50IikgKyAKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCiMjIyMgRGlzdHJpYnV0aW9uIG9mIE96b25lIENvbmNlbnRyYXRpb25zCgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQphcXNfY29tYmluZWQgJT4lCiAgZ2dwbG90KCkgKwogICAgZ2VvbV9oaXN0b2dyYW0oYWVzKG1vbnRobHlfbWVhbl9vem9uZSksIGJpbnMgPSAxMDApICsgCiAgICBsYWJzKHggPSAiTWVhbiBNb250aGx5IE96b25lIENvbmNlbnRyYXRpb24gKHBwbSkiLCB5ID0gIkNvdW50IikgKyAKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCiMjIyMgRGlzdHJpYnV0aW9uIG9mIFBNMTAgQ29uY2VudHJhdGlvbnMKClRoaXMgZGlzdGlidXRpb24gaXMgcmlnaHQtc2tld2VkCgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQphcXNfY29tYmluZWQgJT4lCiAgZ2dwbG90KCkgKwogICAgZ2VvbV9oaXN0b2dyYW0oYWVzKG1vbnRobHlfbWVhbl9wbTEwKSwgYmlucyA9IDEwMCkgKyAKICAgIGxhYnMoeCA9ICJNZWFuIE1vbnRobHkgUE0xMCBDb25jZW50cmF0aW9uICjCtWcvbV4zKSIsIHkgPSAiQ291bnQiKSArIAogICAgdGhlbWVfY2xhc3NpYygpCmBgYAoKIyMjIyBEaXN0cmlidXRpb24gb2YgUE0yLjUgQ29uY2VudHJhdGlvbnMKCmBgYHtyIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmFxc19jb21iaW5lZCAlPiUKICBnZ3Bsb3QoKSArCiAgICBnZW9tX2hpc3RvZ3JhbShhZXMobW9udGhseV9tZWFuX3BtMi41KSwgYmlucyA9IDEwMCkgKyAKICAgIGxhYnMoeCA9ICJNZWFuIE1vbnRobHkgUE0yLjUgQ29uY2VudHJhdGlvbiAowrVnL21eMykiLCB5ID0gIkNvdW50IikgKyAKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCiMjIyMgRGlzdHJpYnV0aW9uIG9mIFNPMiBDb25jZW50cmF0aW9ucwoKYGBge3IgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KYXFzX2NvbWJpbmVkICU+JQogIGdncGxvdCgpICsKICAgIGdlb21faGlzdG9ncmFtKGFlcyhtb250aGx5X21lYW5fc28yKSwgYmlucyA9IDEwMCkgKyAKICAgIGxhYnMoeCA9ICJNZWFuIE1vbnRobHkgU08yIENvbmNlbnRyYXRpb24gKHBwYikiLCB5ID0gIkNvdW50IikgKyAKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCiMjIyBQb2xsdXRhbnQgQ29uY2VudHJhdGlvbnMgYnkgTW9udGgKCiMjIyMgQ08gQ29uY2VudHJhdGlvbiBieSBNb250aAoKYGBge3IgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KYXFzX2NvbWJpbmVkICU+JQogIGdncGxvdCgpICsKICAgIGdlb21fcG9pbnQoYWVzKG1vbnRoX3llYXIsIG1vbnRobHlfbWVhbl9jbyksIGFscGhhID0gMC4yKSArIAogICAgbGFicyh4ID0gIlRpbWUiLCB5ID0gIk1lYW4gTW9udGhseSBDTyBDb25jZW50cmF0aW9uIChwcG0pIikgKyAKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCiMjIyMgTk8yIENvbmNlbnRyYXRpb24gYnkgTW9udGgKCmBgYHtyIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmFxc19jb21iaW5lZCAlPiUKICBnZ3Bsb3QoKSArCiAgICBnZW9tX3BvaW50KGFlcyhtb250aF95ZWFyLCBtb250aGx5X21lYW5fbm8yKSwgYWxwaGEgPSAwLjIpICsgCiAgICBsYWJzKHggPSAiVGltZSIsIHkgPSAiTWVhbiBNb250aGx5IE5PMiBDb25jZW50cmF0aW9uIChwcGIpIikgKyAKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCiMjIyMgT3pvbmUgQ29uY2VudHJhdGlvbiBieSBNb250aAoKYGBge3IgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KYXFzX2NvbWJpbmVkICU+JQogIGdncGxvdCgpICsKICAgIGdlb21fcG9pbnQoYWVzKG1vbnRoX3llYXIsIG1vbnRobHlfbWVhbl9vem9uZSksIGFscGhhID0gMC4yKSArIAogICAgbGFicyh4ID0gIlRpbWUiLCB5ID0gIk1lYW4gTW9udGhseSBPem9uZSBDb25jZW50cmF0aW9uIChwcG0pIikgKyAKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCiMjIyMgUE0xMCBDb25jZW50cmF0aW9uIGJ5IE1vbnRoCgpgYGB7ciBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQphcXNfY29tYmluZWQgJT4lCiAgZ2dwbG90KCkgKwogICAgZ2VvbV9wb2ludChhZXMobW9udGhfeWVhciwgbW9udGhseV9tZWFuX3BtMTApLCBhbHBoYSA9IDAuMikgKyAKICAgIGxhYnMoeCA9ICJUaW1lIiwgeSA9ICJNZWFuIE1vbnRobHkgUE0xMCBDb25jZW50cmF0aW9uICjCtWcvbV4zKSIpICsgCiAgICB0aGVtZV9jbGFzc2ljKCkKYGBgCgojIyMjIFBNMi41IENvbmNlbnRyYXRpb24gYnkgTW9udGgKCmBgYHtyIGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmFxc19jb21iaW5lZCAlPiUKICBnZ3Bsb3QoKSArCiAgICBnZW9tX3BvaW50KGFlcyhtb250aF95ZWFyLCBtb250aGx5X21lYW5fcG0yLjUpLCBhbHBoYSA9IDAuMikgKyAKICAgIGxhYnMoeCA9ICJUaW1lIiwgeSA9ICJNZWFuIE1vbnRobHkgUE0yLjUgQ29uY2VudHJhdGlvbiAowrVnL21eMykiKSArIAogICAgdGhlbWVfY2xhc3NpYygpCmBgYAoKIyMjIyBTTzIgQ29uY2VudHJhdGlvbiBieSBNb250aAoKYGBge3IgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRX0KYXFzX2NvbWJpbmVkICU+JQogIGdncGxvdCgpICsKICAgIGdlb21fcG9pbnQoYWVzKG1vbnRoX3llYXIsIG1vbnRobHlfbWVhbl9zbzIpLCBhbHBoYSA9IDAuMikgKyAKICAgIGxhYnMoeCA9ICJUaW1lIiwgeSA9ICJNZWFuIE1vbnRobHkgU08yIENvbmNlbnRyYXRpb24gKHBwYikiKSArIAogICAgdGhlbWVfY2xhc3NpYygpCmBgYAoKCgojIyMgQ29uY2VudHJhdGlvbnMgYnkgQWlyIEJhc2luCgpgYGB7ciBlY2hvPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQojIyMjIyBtb3ZlIHRvIGRhdGEgcHJlcAphcXNfY29tYmluZWRfc2YgPC0gYXFzX2NvbWJpbmVkICU+JQogIHN0X2FzX3NmKGNvb3JkcyA9IGMoImxvbmdpdHVkZSIsICJsYXRpdHVkZSIpLCBjcnMgPSBjcnNfbmFkODMpICU+JQogIHN0X2pvaW4oY2FyYl9haXJfYmFzaW5zKQogIAojIyMjIyBtYWtlcyBmaWd1cmUKYXFzX2NvbWJpbmVkX3NmICU+JQogIGdncGxvdCgpICsKICAgIGdlb21fc21vb3RoKGFlcyhtb250aF95ZWFyLCBtb250aGx5X21lYW5fcG0yLjUpLCBhbHBoYSA9IDAuMikgKyAKICAgIGxhYnMoeCA9ICJUaW1lIiwgeSA9ICJNZWFuIE1vbnRobHkgUE0yLjUgQ29uY2VudHJhdGlvbiAowrVnL21eMykiKSArIAogICAgZmFjZXRfd3JhcCh+IE5BTUUpICsKICAgIHRoZW1lX2NsYXNzaWMoKQpgYGAKCg==